resin安装与配置

1.saltstack安装

        准备两台机器 192.168.0.84 192.168.0.83

        设置hostname

        192.168.0.84

1
[root@web9 ~]# vim /etc/sysconfig/network

01

        192.168.0.83

1
[root@web10 ~]# vim /etc/sysconfig/network

02

        配置hosts

        192.168.0.84

1
[root@web9 ~]# vim /etc/hosts

03

        192.168.0.83

1
[root@web10 ~]# vim /etc/hosts

04

        关闭selinux,清空iptables规则

        192.168.0.84:

1
2
[root@web9 ~]# yum install -y epel-release
[root@web9 ~]# yum install -y salt-master salt-minion

        192.168.0.83:

1
2
[root@web10 ~]# yum install -y epel-release
[root@web10 ~]# yum install -y salt-minion

启动服务

        192.168.0.84上:

        编辑配置文件 /etc/salt/minion

1
[root@web9 ~]# vim /etc/salt/minion

        大概16行修改或增加

1
master: 192.168.0.84

05

        启动服务

1
2
[root@web9 ~]# service salt-master start
Starting salt-master daemon: [确定]
1
2
[root@web9 ~]# service salt-minion start
Starting salt-minion daemon: [确定]

        192.168.0.83上:

        编辑配置文件 /etc/salt/minion

1
[root@web10 ~]# vim /etc/salt/minion

        大概16行修改或增加

1
master: 192.168.0.84

06

        启动服务

1
2
[root@web10 ~]# service salt-minion start
Starting salt-minion daemon: [确定]

配置认证

        以下操作都是在192.168.0.84上:

07

        现在要把 web10 加到 Accepted Keys

1
[root@web9 ~]# salt-key -a web10.yanyi.com

08

        此时我们在client的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件

09

        可以使用 salt-key 命令查看到已经签名的客户端

        salt-key 可以使用-A签名所有主机,也可以使用-d删除指定主机的key,-D删除所有主机。

远程执行命令

        示例1: salt ‘‘ test.ping 这里的表示所以已经签名的客户端,也可以指定其中一个,比如web10.yanyi.com

10

        示例2: salt ‘*’ cmd.run ‘df -h’

11

        说明: 这里的必须是在master上已经被接受过的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10 web11, 那我们可以写成 salt ‘web’ salt ‘web1[01]’ salt -L ‘web10,web11’ salt -E ‘web(10|11) 等形式,使用列表,即多个机器用 逗号分隔,而且需要加-L,使用正则必须要带-E选项>。 它还支持grains,加-G选项, pillar 加-I选项,下面会介绍到。

2.saltstack grains

        grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。

        salt ‘web10.yanyi.com’ grains.ls 列出所有的grains项目名字

1
[root@web9 ~]# salt 'web10.yanyi.com' grains.ls

12

        salt ‘web10.yanyi.com’ grains.items 列出所有grains项目以及值

1
[root@web9 ~]# salt 'web10.yanyi.com' grains.items

13

        grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的。

        我们可以根据grains收集到的一些信息,做配置管理工作。

        grains支持自定义信息。

自定义 grains

        192.168.0.83上,编辑文件 /etc/salt/grains

1
[root@web10 ~]# vim /etc/salt/grains

        添加:

1
2
role: nginx
env: test

14

        重启minion服务

1
2
3
[root@web10 ~]# service salt-minion restart
Stopping salt-minion daemon: [确定]
Starting salt-minion daemon: [确定]

        192.168.0.84上:

        获取 grains:salt ‘*’ grains.item role env

1
[root@web9 ~]# salt '*' grains.item role env

15

        可以借助grains的一些属性信息来执行

1
[root@web9 ~]# salt -G role:nginx cmd.run 'hostname'

16

3.saltstack pillar

        pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

        配置自定义pillar /etc/salt/master

1
[root@web9 ~]# vim /etc/salt/master

        找到如下配置:

17

        去掉前面的警号

18

        创建此目录

1
[root@web9 ~]# mkdir /srv/pillar

        编辑 /srv/pillar/test.sls

1
[root@web9 ~]# vim /srv/pillar/test.sls

        内容如下

1
conf: /etc/123.conf

19

        编辑 /srv/pillar/top.sls

1
[root@web9 ~]# vim /srv/pillar/top.sls

        内容如下

1
2
3
base:
'web10.yanyi.com':
- test

20

        重启master

1
2
3
[root@web9 ~]# service salt-master restart
Stopping salt-master daemon: [确定]
Starting salt-master daemon: [确定]

        当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:

        salt ‘*’ saltutil.refresh_pillar

21

        验证:salt ‘*’ pillar.item conf

22

        pillar同样可以用来作为salt的匹配对象。比如 salt -I ‘conf:/etc/123.conf’ test.ping

23

4.配置管理安装 apache

        192.168.0.84上,编辑配置文件 /etc/salt/master

1
[root@web9 ~]# vim /etc/salt/master

        搜索找到 file_roots

24

        打开如下内容的注释:

25

        创建 /stv/salt 目录

1
[root@web9 ~]# mkdir /srv/salt

        编辑 /srv/salt/top.sls

1
[root@web9 ~]# vim /srv/salt/top.sls

        加入如下内容

1
2
3
base:
'*':
- apache

26

        意思是,在所有的客户端上执行 apache模块

        重启 /etc/init.d/salt-master restart

1
2
3
[root@web9 ~]# service salt-master restart
Stopping salt-master daemon: [确定]
Starting salt-master daemon: [确定]

        编辑 /srv/salt/apache.sls

1
[root@web9 ~]# vim /srv/salt/apache.sls

        加入如下内容,这个就是apache模块的内容

        这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。

1
2
3
4
5
6
7
8
apache-service:
pkg.installed:
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True

27

        说明,apache-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

        执行: salt ‘web10.yanyi.com’ state.highstate

28

5.配置文件和目录管理

配置管理文件

        创建配置文件

1
[root@web9 ~]# vim /srv/salt/filetest.sls

        添加内容

1
2
3
4
5
6
7
file_test:
file.managed:
- name: /tmp/yanyi.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 644

29

        说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test

        创建目录

1
2
[root@web9 ~]# mkdir /srv/salt/test
[root@web9 ~]# mkdir /srv/salt/test/123

        更改 top.sls

1
[root@web9 ~]# vim /srv/salt/top.sls

30

        服务端刷新

1
[root@web9 ~]# salt 'web10.yanyi.com' state.highstate

31

        客户端查看

32

配置管理目录

        编辑配置文件

1
[root@web9 ~]# vim /srv/salt/dirtest.sls

        添加内容

1
2
3
4
5
6
7
8
9
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True

33

        clean: True 加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除

        参考 http://www.0550go.com/automation-deployment/saltstack/saltstack-file-recurse.html

        编辑 top.sls

1
[root@web9 ~]# vim /srv/salt/top.sls

        添加内容

34

        服务端刷新

1
[root@web9 ~]# salt 'web10.yanyi.com' state.highstate

35

        查看客户端

36

6.配置管理远程命令

        编辑配置文件

1
[root@web9 ~]# vim /srv/salt/cmdtest.sls

        添加内容

1
2
3
4
5
6
7
cmd_test:
cmd.run:
- onlyif: test -f /tmp/111.txt
- names:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user: root

37

        还可以加unless,和onlyif正好相反

        编辑 top.sls

1
[root@web9 ~]# vim /srv/salt/top.sls

38

        服务端刷新

1
[root@web9 ~]# salt 'web10.yanyi.com' state.highstate

39

        查看客户端

40

        重新修改配置文件

1
[root@web9 ~]# vim /srv/salt/cmdtest.sls

        添加内容

1
2
3
4
5
6
7
cmd_test:
cmd.run:
- unless: test -f /tmp/111.txt
- names:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user: root

41

        服务端刷新

1
[root@web9 ~]# salt 'web10.yanyi.com' state.highstate

42

        查看客户端

43

7.配置管理远程脚本

        编辑配置文件

1
[root@web9 ~]# vim /srv/salt/shelltest.sls

        添加内容

1
2
3
4
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root

44

        编辑脚本文件

1
[root@web9 ~]# vim /srv/salt/test/1.sh

        编辑内容

1
2
3
4
5
6
7
8
#!/bin/bash
touch /tmp/111.txt
if [ -d /tmp/1233 ]
then
rm -rf /tmp/1233
else
mkdir /tmp/1233
fi

45

        编辑 top.sls

1
[root@web9 ~]# vim /srv/salt/top.sls

46

        服务端刷新

1
[root@web9 ~]# salt 'web10.yanyi.com' state.highstate

47

        客户端查看

48

8.配置管理任务计划

        编辑配置文件

1
[root@web9 ~]# vim /srv/salt/crontest.sls

        添加内容

1
2
3
4
5
6
7
8
9
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'

49

        注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。想要删除该cron,需要增加:
cron.absent:

        - name: /bin/touch /tmp/111.txt

        两者不能共存,要想删除一个cron,那之前的present就得去掉。

        编辑 top.sls

1
[root@web9 ~]# vim /srv/salt/top.sls

50

        服务端刷新

1
[root@web9 ~]# salt 'web10.yanyi.com' state.highstate

51

        客户端查看

52

9.saltstack 几个常用的命令

        cp.get_file 拷贝master上的文件到客户端

1
[root@web9 ~]# salt 'web10.yanyi.com' cp.get_file salt://apache.sls /tmp/yanyi.com

53

        cp.get_dir 拷贝目录

1
[root@web9 ~]# salt 'web10.yanyi.com' cp.get_dir salt://test /tmp/yanyi

54

        会自动在客户端创建test目录,所以后面不要加test,如果写成 /tmp/yanyi/ 则会在/tmp/yanyi/目录下又创建test

        salt-run manage.up 显示存活的minion

55

        salt ‘*’ cmd.script salt://test/1.sh 命令行下执行master上的shell脚本

56